<template>
	<div style="display: flex;flex-direction: row;justify-content: center;align-items: center;height: 100%;">
		<div class="bigbox">
			<div class="userTitleBox">
				<div style="font-size: 26px;font-weight: bold;">考生须知</div>
				<div style="font-size: 18px;color: #F56C6C;font-weight: bold;">距离考试:&nbsp;&nbsp;{{minutes}}分{{seconds}}秒</div>
			</div>
			<div class="conBox">
				<p>特别说明：</p>
				<br><br>
				《考生须知》事关考试严肃性、公正性和考生切身利益，请务必认真阅读并严格遵守，否则由此导致的答案上传失败、答案包损坏、被认定为作弊、取消考试资格、考试结果无效等一切不利后果，将由考生自行承担！考生进入考试正式作答界面之时，即视为考生已完整阅读、充分理解并承诺遵守《考生须知》规定的全部内容。
				<br><br>
				1.参加在线考试的考生须做到诚信考试，对在考试中有违规或作弊行为的考生，有关部门将视不同情况根据国家有关法律、法规和教育部有关规定给予严肃处理。对弄虚作假者，不论何时，一经查实，即由考生单位按有关规定取消资格。
				<br><br>
				2、依据《国家教育考试违规处理办法》规定，考生有下列情形之一的，可以视情节轻重，同时给予暂停参加该项考试1至3年的处理；情节特别严重的，可以同时给予暂停参加各种国家教育考试1至3年的处理：
				<br><br>
				组织团伙作弊的；向考场外发送、传递试题信息的；使用相关设备接收信息实施作弊的；伪造、变造身份证、准考证及其他证明材料，由他人代替或者代替考生参加考试的。
				<br><br>
				3、为确保考生答案上传成功，请务必遵守以下要求，否则导致的上传失败、答案包缺失等任何不利后果，均由考生自行承担：
				<br><br>
				（1）上传答案必须等待弹出“上传成功”字样,方可换题离开；
				<br><br>
				（2）在上传答案的等待过程中禁止切题，否则会导致答案上传不成功；
				<br><br>
				（3）如有照片上传题，请最迟于考试结束前5分钟前上传答案，并在确认答案上传成功后方可离开本题；
				<br><br>
				（4）请在考试时间结束前5分钟内尽早上传答案，否则可能导致上传答案失败，若遇异常，务必在离开考试（场）规定区域前当场联系考试工作人员，不得擅自离开或擅自处理。
				<br><br>
				4.考生在参加在线考试前请准备和调试好设备，以保证考试正常进行。
				<br><br>
				考生须知
				<br><br>
				1.本次考试需PC端和移动端（手机端）同时登录，PC端用于在线考试及人脸识别，移动端用于考生异常行为监控；PC端建议您安装Chrome75或以上版本浏览器访问考试系统。
				<br><br>
				2.考中需实时联网，因自身设备或网络故障造成无法完成考试的，后果由考生自行承担。
				<br><br>
				3.考生须保证自己的完整面部在考试全程都被摄像头拍摄到。不允许中途如厕。
				<br><br>
				4.考前请提前关闭任何与考试无关的网页和软件，以免被动弹窗被系统误判为作弊，若有弹窗请尽快（规定秒数）关闭。
				<br><br>
				5.考中请避免切换出考试界面或关闭考试系统重新登录，切屏次数会被系统记录，次数超过规定次数（包括未及时关闭弹窗）系统将强制收卷。
				<br><br>
				6.监考老师可随时通过发送弹窗通知联系考生，考生须随时注意考中通知。若无作弊行为，将不会产生作弊记录。
				<br><br>
				7.考生有义务保持双摄像头全程正常运转，否则将被取消继续考试的资格。若中途有一个摄像头出现故障，须在另一摄像头能清晰拍摄的情况下，在5分钟内修复，否则不能继续考试。若双摄像头同时失效，则立刻失去考试资格。另一方面，由于设备故障不能继续考试的考生，若无作弊行为，将不会产生作弊记录。
				<br><br>
				8.闭卷考试。考生主动或被动打开非现场输入文字的文件，将被判定为作弊。考场桌面除身份证外，只允许出现一支笔和一张白纸作为草稿纸。此外其它动作和物品的出现皆可能被判定为作弊。
				<br><br>
				9.考试中被发现有作弊行为的考生，将被取消报考资格，名单将被通报到考生单位或所在学校。
				<br><br>
				10.考试正常时长为X分钟，主考有权在遇到不可预见的问题时改变考试时长。一旦时长更改，将在考试系统以弹窗的方式及时通知所有考生。
				<br><br>
				11.考试中间若出现系统崩溃等故障，考试中心将酌情延长考试时间；但最后10分钟内系统崩溃属于正常情况，按惯例不补时，以系统重启后保留的数据为最终结果。
				<br><br>
				注意事项
				<br><br>
				以下为明令禁止的事项：
				<br><br>
				1.开考规定时间内不得提前交卷。
				<br><br>
				2.禁止使用虚拟机。
				<br><br>
				3.禁止伪造资料、身份信息替代他人或被替代参加考试的行为。
				<br><br>
				4.禁止使用双屏，无论第二屏幕是否开启。
				<br><br>
				5.禁止作答空间内出现两人或两人以上、或通过他人协助进行作答的情况。
				<br><br>
				6.禁止遮挡面部或摄像头、离开视频范围等逃避监控的行为。
				<br><br>
				7.禁止考试期间翻看书籍、资料或使用手机、平板电脑等移动设备查阅答案的行为。
				<br><br>
				8.禁止佩戴入耳式耳机、耳麦的行为。
				<br><br>
				9.考试过程中禁止触碰USB接口。
				<br><br>
				10.禁止以任何形式访问除考试系统外任何网站。
				<br><br>
				11.禁止使用任何形式的即时通讯工具。
				<br><br>
				12.禁止与监考老师、技术支持以外的任何人联系。
				<br><br>
				13.禁止拒绝监考老师的检查要求。严禁在检查过程中擅自关闭摄像头、监考移动端。
				<br><br>
				14.禁止随意切换出考试界面或关闭考试系统重新登录的行为；
				<br><br>
				15.禁止抄录、传播试题内容等；
				<br><br>
				16.禁止恶意破坏考试系统、篡改考试数据；
				<br><br>
				违反上述禁则任何一条，都将以作弊论处。

			</div>
			<div class="checkBox">
				<el-checkbox v-model="checked">我已确认并知晓<span style="color: #E6A23C;">
						<考生须知>
					</span>内容</el-checkbox>
			</div>
			<div class="checkBox">
				<el-button type="primary" :disabled="!checked" size="medium" @click="isGoExam">进入考试</el-button>
			</div>
		</div>
	</div>
</template>

<script>
	import utils from "@/utils/utils";
	export default {
		data() {
			return {
				checked: false,
				intervalId:0,
				submitTimestamp:null,
				examId:'',
				minutes: 0,
				seconds: 0,
				unify:'',
			}
		},
		created() {
			this.getPageList()
		},
		beforeDestroy() {
			// 销毁定时器
			if (this.intervalId) {
				clearInterval(this.intervalId);
				this.intervalId = null;
				console.log('定时器已销毁')
			}
		},
		methods: {
			getPageList(){
				this.examId = localStorage.getItem('examID')
				this.$axios.get("/exam/getById?id=" + this.examId).then(res => {
					console.log('这啥？', res)
					this.unify = res.data.unify
					localStorage.setItem('playTime',this.changeDate(res.data.startTime))
					this.startCountdown()
				})
			},
			isGoExam(){
				const remainingTime = this.submitTimestamp - Date.now();
				if (remainingTime <= 0) {
					this.goExam()
				}else{
					this.$message('尚未到考试时间')
				}
			},
			goExam(){
				console.log('进入考试')
				let startTime = new Date().getTime()
				if(!localStorage.getItem('startTime')){
					localStorage.setItem('startTime', startTime)
				}
				localStorage.removeItem('playTime')
				this.$router.push({
					path: '/examination',
				})
			},
			startCountdown() {
				// 清除之前的倒计时（如果有的话）  
				if (this.intervalId) {
					clearInterval(this.intervalId);
				}
				this.submitTimestamp = parseInt(localStorage.getItem('playTime'))
				console.log(this.submitTimestamp,'playtime')
				// 计算剩余时间（毫秒）  
				const remainingTime = this.submitTimestamp - Date.now();
				console.log(remainingTime,'什么')
				// 如果时间已经过了，则不启动倒计时  
				if (remainingTime <= 0) {
					clearInterval(this.intervalId);
					console.log('指定时间已过');
					//自动跳转考试页面
					if(this.unify == '1'){
						this.goExam()
					}
					return
				}
				// 更新分钟和秒  
				this.updateCountdown(remainingTime);
				// 每秒更新一次倒计时  
				this.intervalId = setInterval(() => {
					const newRemainingTime = this.submitTimestamp - Date.now();
					if (newRemainingTime > 0) {
						this.updateCountdown(newRemainingTime);
					} else {
						// 倒计时结束，清除间隔  
						clearInterval(this.intervalId);
						this.intervalId = null;
						console.log('跳转考试')
						if(this.unify == '1'){
							this.goExam()
						}
					}
				}, 1000);
			},
			//年月日时分秒转时间戳
			changeDate(dateTimeString) {
				const year = parseInt(dateTimeString.substring(0, 4), 10);
				const month = parseInt(dateTimeString.substring(5, 7), 10) - 1;
				const day = parseInt(dateTimeString.substring(8, 10), 10);
				const hours = parseInt(dateTimeString.substring(11, 13), 10);
				const minutes = parseInt(dateTimeString.substring(14, 16), 10);
				const seconds = parseInt(dateTimeString.substring(17, 19), 10);
			
				// 创建Date对象  
				const date = new Date(year, month, day, hours, minutes, seconds);
				return date.getTime();
			},
			updateCountdown(remainingTime) {
				const totalSeconds = Math.floor(remainingTime / 1000);
				this.minutes = Math.floor(totalSeconds / 60);
				this.seconds = totalSeconds % 60;
			},
		}
	}
</script>

<style scoped>
	.bigbox {
		width: 85%;
		height: calc(100vh - 200px);
		border-radius: 10px;
		box-shadow: 0px 0px 10px 3px gainsboro;
		padding: 80px;
	}

	.userTitleBox {
		display: flex;
		flex-direction: row;
		justify-content: space-between;
		align-items: center;
	}

	.conBox {
		font-size: 18px;
		margin: 30px auto;
		max-height: 80%;
		overflow-y: scroll;
	}

	.checkBox {
		margin: 20px auto;
		display: flex;
		flex-direction: row;
		justify-content: center;
	}
</style>
